package com.goodcol.plugin.entity;

import lombok.Data;

import java.util.Map;

/**
 * 列信息
 *
 * @author QuickCode
 * @version 1.0.0
 * 
 */
@Data
public abstract class ColumnInfo {
    /**
     * 名称（Java属性名称）
     */
    private String name;
    /**
     * 注释
     */
    private String comment;
    /**
     * 全类型
     */
    private String type;
    /**
     * 是否主键
     */
    private Boolean isPrimaryKey;
    /**
     * 短类型
     */
    private String shortType;
    /**
     * 标记是否为自定义附加列
     */
    private Boolean custom;
    /**
     * 扩展数据
     */
    private Map<String, Object> ext;

    /**
     * 获取数表字段名称
     *
     * @return String
     */
    public abstract String getColumnName();

    /**
     * 获取当前类持有的原始对象（DasColumn 或 PsiField）
     *
     * @return DasColumn 或 PsiField
     */
    public abstract Object getObj();

    /**
     * 返回数据库字段类型
     *
     * @return String
     */
    public abstract String getJdbcType();

    /**
     * 返回数据库字段类型的长度
     *
     * @return 返回实际长度，-1表示该类型没有Length
     */
    public abstract Integer getTypeLength();

    /**
     * 返回数据库列是否可为空
     *
     * @return Boolean
     */
    public abstract Boolean getIsNotNull();

    /**
     * 返回数据库列的原始注释
     *
     * @return String
     */
    public abstract String getOriginComment();

}
